home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2001 / MacHack 2001.toast / pc / The Hacks / Light Sleeper / Code / Backlight.c next >
Encoding:
C/C++ Source or Header  |  2001-06-23  |  2.3 KB  |  106 lines

  1. #include <Devices.h>
  2. #include "Backlight.h"
  3.  
  4. static Boolean    gHasBacklight;
  5. static short    gBacklightState;
  6. static short    gOriginalBrightness;
  7. static short    gDriverRef;
  8. static Boolean    gInitialized = false;
  9.  
  10. // This stuff is from the "Portable (BackLit)" document from the original Mac 
  11. // Portable (!)  There's a copy of the doc in the (Refs & Resources) folder.
  12.  
  13. /* --------------------------------------------------------------------------------    */
  14. void InitializeBacklightControl(void)
  15. {
  16.     if(!gInitialized)
  17.     {
  18.         gInitialized = true;
  19.         gOriginalBrightness = 31;
  20.         gHasBacklight = (OpenDriver("\p.Backlight", &gDriverRef) == noErr);
  21.     }
  22. }
  23.  
  24. /* --------------------------------------------------------------------------------    */
  25. OSErr GetBacklightBrightness(short *value)
  26. {
  27.     CntrlParam        pb;
  28.     OSErr            err;
  29.  
  30.     if(!gHasBacklight)
  31.     {
  32.         *value = 100;
  33.         return paramErr;
  34.     }
  35.     
  36.     pb.csCode = 0x5301;
  37.     pb.ioCRefNum = gDriverRef;
  38.     err = PBStatusSync((ParmBlkPtr)&pb);
  39.     *value = pb.csParam[0];
  40.     return err;
  41. }
  42.  
  43. /* --------------------------------------------------------------------------------    */
  44. OSErr SwitchBacklight(short state)
  45. {
  46.     CntrlParam        pb;
  47.     OSErr            err;
  48.     short            brightness;
  49.  
  50.     if(!gHasBacklight)
  51.         return paramErr;
  52.     
  53.     // Make sure we're not already in the right state
  54.     if((err = GetBacklightBrightness(&brightness)) != noErr || state == (brightness ? 1 : 0))
  55.         return err;
  56.         
  57.     // Set up the correct driver num
  58.     pb.ioCRefNum = gDriverRef;
  59.  
  60.     // Turn it on
  61.     if(state == 1)
  62.     {
  63.         pb.csCode = 0x4301;
  64.         pb.csParam[0] = gOriginalBrightness;
  65.         err = PBControlSync((ParmBlkPtr)&pb);
  66.     }
  67.     
  68.     if(err == noErr)
  69.     {
  70.         // Set the "in use" flag (1 if we're taking control, 0 if we're done)
  71.         pb.csCode = 0x4303;
  72.         pb.csParam[0] = state ? 0 : 1;
  73.         err = PBControlSync((ParmBlkPtr)&pb);
  74.  
  75.         // Turn it off
  76.         if(state == 0 && err == noErr)
  77.         {
  78.             gOriginalBrightness = brightness;
  79.             pb.csCode = 0x4301;
  80.             pb.csParam[0] = 0;
  81.             err = PBControlSync((ParmBlkPtr)&pb);
  82.         }
  83.     }
  84.     
  85.     return err;
  86. }
  87.  
  88. /* --------------------------------------------------------------------------------    */
  89. OSErr SetBacklightBrightness(short value)
  90. {
  91.     CntrlParam        pb;
  92.     OSErr            err;
  93.     short            brightness;
  94.  
  95.     if(!gHasBacklight)
  96.         return paramErr;
  97.     
  98.     // Set up the correct driver num
  99.     pb.ioCRefNum = gDriverRef;
  100.     pb.csCode = 0x4301;
  101.     pb.csParam[0] = value;
  102.     err = PBControlSync((ParmBlkPtr)&pb);
  103.     
  104.     return err;
  105. }
  106.